package 剑指offer;

import java.util.Stack;

public class 剑指Offer30包含min函数的栈 {
    private Stack<Integer> stack1 = null;
    private Stack<Integer> stack2 = null;
    /** initialize your data structure here. */
    public 剑指Offer30包含min函数的栈() {
        stack1 = new Stack<Integer>();//主栈，保存元素
        stack2 = new Stack<Integer>();//辅助栈，保存最小的元素
    }

    public void push(int x) {//两栈保持入栈的元素的个数相同，就确保了出栈的两栈元素一致的情况，保证stack2的栈顶一致是stack1的最小元素
        stack1.push(x);//有新元素直接入栈
        if(stack2.size() == 0){//辅助栈为空，直接入栈
            stack2.push(x);
        }else{//否则判断入栈元素与栈顶元素的大小。
            int y = stack2.peek();
            if(y <= x){
                stack2.push(y);
            }else{
                stack2.push(x);
            }
        }
    }

    //出栈
    public void pop() {
        if(!stack1.isEmpty()){
            stack1.pop();
        }
        if(!stack2.isEmpty()){
            stack2.pop();
        }
    }

    //查看栈顶
    public int top() {
        if(!stack1.isEmpty()){
            return stack1.peek();
        }
        return -1;
    }

    //查看最小元素
    public int min() {
        if(stack2.isEmpty()) return -1;
        return stack2.peek();
    }
}
